package com.tenton.work;

import com.rabbitmq.client.Channel;
import com.rabbitmq.client.Connection;
import com.rabbitmq.client.ConnectionFactory;

import java.io.IOException;
import java.util.concurrent.TimeoutException;

/**
 * @ClassName： WorkProducer
 * @Description： 2、工作模式 生产者
 * @Author： tangdong
 * @Date： 2023/11/21 17:03
 */
public class WorkProducer {
    public static void main(String[] args) {
        //创建连接工厂
        ConnectionFactory factory = new ConnectionFactory();
        //设置IP
        factory.setHost("192.168.1.91");
        //设置端口
        factory.setPort(5672);
        //设置用户名
        factory.setUsername("td");
        //设置密码
        factory.setPassword("123456");
        //设置虚拟地址
        factory.setVirtualHost("/rabbit-work");
        Connection connection = null;
        Channel channel = null;
        try {
            //创建连接
            connection = factory.newConnection();
            //创建通道
            channel = connection.createChannel();
            //绑定通道与队列
            //String queue: 被绑定的消息队列名，当该消息队列不存在时，将新建该消息队列
            //Boolean durable: 是否持久化消息队列， 该参数持久化的仅为队列，而不包含队列中的消息
            //Boolean exclusive: 该通道是否独占该队列
            //Boolean autoDelete: 消费完成时是否删除队列， 该删除操作在消费者彻底断开连接之后进行。
            //Map<String, Object> arguments：其他配置参数
            channel.queueDeclare("hello", true, false, false, null);
            //方法是基础的发布消息方法，它有四个参数
            //String exchange : 交换机名， 当不使用交换机时，传入“”空串。
            //String routingKey :（路由地址） 发布消息的队列， 无论channel绑定那个队列，最终发布消息的队列都有该字串指定
            //AMQP.BasicProperties props ：消息的配置属性，例如 MessageProperties.PERSISTENT_TEXT_PLAIN 表示消息持久化。
            //byte[] body ：消息数据本体， 必须是byte数组
            for (int i = 0; i < 10; i++) {
                channel.basicPublish("", "hello", null, ("hello rabbitmq，我是" + i).getBytes());
            }
        } catch (IOException e) {
            throw new RuntimeException(e);
        } catch (TimeoutException e) {
            throw new RuntimeException(e);
        }
    }
}
